package com.sdnu.iosclub.qvs.controller;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sdnu.iosclub.qvs.config.RabbitMQConfig;
import com.sdnu.iosclub.qvs.entity.QvsResult;
import com.sdnu.iosclub.qvs.service.QvsResultService;
import com.sdnu.iosclub.serviceutil.R;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author wcr
 * @since 2022-09-05
 */
@RestController
@RequestMapping("/qvs/result")
@CrossOrigin
public class QvsResultController {
    @Autowired
    private QvsResultService qvsResultService;

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @ApiModelProperty("获取所有选择答题结果")
    @GetMapping("getAllResult")
    public R getAllResult(){
        List<QvsResult> resultList=qvsResultService.getAllResult();
        return R.ok().data("results",resultList);
    }

    /**
     *分页获取选择答题信息
     * @param current 当前页数
     * @param size 每页的数量
     * @return 返回分页问卷信息和信息数量
     */
    @ApiOperation("分页获取选择答题结果")
    @GetMapping("pageGetResult/{current}/{size}")
    public R pageGetSurvey(
            @PathVariable long current,
            @PathVariable long size
    ){
        Page<QvsResult> page = qvsResultService.pageGetResult(current,size);
        return R.ok().data("results",page.getRecords()).data("total",page.getTotal());
    }

    /**
     * 添加问卷
     * @param qvsResult 选择回答结果实体
     * @return 返回添加状态
     */
    @ApiOperation("添加选择题答题结果")
    @PostMapping("addResult")
    public R addSurvey(@RequestBody QvsResult qvsResult){
        return qvsResultService.addResult(qvsResult)?R.ok().message("添加成功"):R.error().message("添加失败");
    }

    /**
     * 批量添加选择题答题结果
     * @param data 选择题答题结果集合json数据
     * @return 是否添加成功
     */
    @ApiOperation("批量添加选择题答题结果")
    @PostMapping("addResultByBatch")
    public R addResultByBatch(@RequestBody String data){
        //解析JSON字符串
        JSONObject jsonObject = JSONObject.parseObject(data);
        List<QvsResult> list = JSON.parseArray(jsonObject.get("list").toString(),QvsResult.class);
        //放入消息队列即可，一定要先解析再放入队列，这样保证报入队列的都是有效的数据
        rabbitTemplate.convertAndSend(RabbitMQConfig.QVS_EXCHANGE_NAME,RabbitMQConfig.QVS_RESULT_ROUTING,list);

        return R.ok().message("添加成功");
    }

    /**
     * 修改问卷
     * @param qvsResult 修改后的回答结果实体
     * @return 返回修改状态
     */
    @ApiOperation("修改选择回答结果")
    @PutMapping("updateResult")
    public R updateSurvey(@RequestBody QvsResult qvsResult){
        return qvsResultService.updateResult(qvsResult)?R.ok().message("修改成功"):R.error().message("修改失败");
    }

    /**
     * 根据id删除选择回答结果
     * @param id 要删除的回答结果id
     * @return 返回删除状态
     */
    @ApiOperation("根据id删除选择回答结果")
    @DeleteMapping("deleteResult/{id}")
    public R deleteSurvey(@PathVariable String id){
        return qvsResultService.deleteResult(id)?R.ok().message("删除成功"):R.error().message("删除失败");
    }

    /**查询用户填写过的问卷的信息
     * @param userId 用户id
     * @return 用户填写过的问卷的信息
     */
    @ApiOperation("查询用户填写过的问卷信息")
    @GetMapping("getSurveyByUserId/{userId}")
    public R getSurveyByUserId(@PathVariable String userId){
        return R.ok().data("items",qvsResultService.getSurveyByUserId(userId));
    }
}

